#ifndef MCU_DATA_SENDER_H
#define MCU_DATA_SENDER_H

#include <ros/ros.h>
#include <std_msgs/String.h>
#include <nlohmann/json.hpp>
#include <string>

/**
 * @brief MCU数据发送器类
 * 
 * 这个类提供了一个简单的接口，让其他ROS节点可以方便地向串口节点发送JSON数据
 */
class McuDataSender {
public:
    /**
     * @brief 构造函数
     * @param nh ROS节点句柄
     */
    McuDataSender(ros::NodeHandle& nh);
    
    /**
     * @brief 析构函数
     */
    ~McuDataSender() = default;
    
    /**
     * @brief 发送字符串键值对
     * @param key 键名
     * @param value 字符串值
     * @return 发送是否成功
     */
    bool sendJsonKeyValue(const std::string& key, const std::string& value);
    
    /**
     * @brief 发送整数键值对
     * @param key 键名
     * @param value 整数值
     * @return 发送是否成功
     */
    bool sendJsonKeyValue(const std::string& key, int value);
    
    /**
     * @brief 发送浮点数键值对
     * @param key 键名
     * @param value 浮点数值
     * @return 发送是否成功
     */
    bool sendJsonKeyValue(const std::string& key, double value);
    
    /**
     * @brief 发送布尔值键值对
     * @param key 键名
     * @param value 布尔值
     * @return 发送是否成功
     */
    bool sendJsonKeyValue(const std::string& key, bool value);
    
    /**
     * @brief 发送JSON键值对（键和值都是字符串）
     * @param key 键名
     * @param value 值（字符串）
     * @return 发送是否成功
     */
    bool sendJsonString(const std::string& key, const std::string& value);
    
    /**
     * @brief 直接发送JSON字符串
     * @param jsonString JSON字符串
     * @return 发送是否成功
     */
    bool sendJsonString(const std::string& jsonString);
    
    /**
     * @brief 检查是否有节点订阅下行话题
     * @return 是否有订阅者
     */
    bool hasSubscribers() const;
    
    /**
     * @brief 获取订阅者数量
     * @return 订阅者数量
     */
    uint32_t getSubscriberCount() const;

private:
    ros::NodeHandle& nh_;
    ros::Publisher downstream_pub_;
};

#endif // MCU_DATA_SENDER_H
